56d09ef2e73c04256427738c28b2b9100707b64d,src/com/landawn/abacus/util/N.java,N,forEach,#C#number#number#R#IndexedBiFunction#BiPredicate#,21840

Before Change


                for (int i = fromIndex; i < toIndex; i++) {
                    result = accumulator.apply(result, i, list.get(i), c);

                    if (predicate.test(list.get(i), result) == false) {
                        break;
                    }
                }
            } else {
                for (int i = fromIndex; i > toIndex; i--) {
                    result = accumulator.apply(result, i, list.get(i), c);

                    if (predicate.test(list.get(i), result) == false) {
                        break;
                    }
                }
            }
        } else {
            final Iterator<? extends T> iter = c.iterator();
            int idx = 0;

            if (fromIndex < toIndex) {
                while (idx < fromIndex && iter.hasNext()) {
                    iter.next();
                    idx++;
                }

                T next = null;

                while (iter.hasNext()) {
                    next = iter.next();
                    result = accumulator.apply(result, idx, iter.next(), c);

                    if (predicate.test(next, result) == false) {
                        break;
                    }

                    if (++idx >= toIndex) {
                        break;
                    }
                }
            } else {
                while (idx <= toIndex && iter.hasNext()) {
                    iter.next();
                    idx++;
                }

                final T[] a = (T[]) new Object[fromIndex - toIndex];

                while (iter.hasNext()) {
                    a[idx - 1 - toIndex] = iter.next();

                    if (idx++ >= fromIndex) {
                        break;
                    }
                }

                for (int i = a.length - 1; i >= 0; i--) {
                    result = accumulator.apply(result, i + toIndex + 1, a[i], c);

                    if (predicate.test(a[i], result) == false) {
                        break;
                    }
                }

After Change


                for (int i = fromIndex; i < toIndex; i++) {
                    result = accumulator.apply(result, i, list.get(i), c);

                    if (conditionToBreak.test(list.get(i), result)) {
                        break;
                    }
                }
            } else {
                for (int i = fromIndex; i > toIndex; i--) {
                    result = accumulator.apply(result, i, list.get(i), c);

                    if (conditionToBreak.test(list.get(i), result)) {
                        break;
                    }
                }
            }
        } else {
            final Iterator<? extends T> iter = c.iterator();
            int idx = 0;

            if (fromIndex < toIndex) {
                while (idx < fromIndex && iter.hasNext()) {
                    iter.next();
                    idx++;
                }

                T next = null;

                while (iter.hasNext()) {
                    next = iter.next();
                    result = accumulator.apply(result, idx, iter.next(), c);

                    if (conditionToBreak.test(next, result)) {
                        break;
                    }

                    if (++idx >= toIndex) {
                        break;
                    }
                }
            } else {
                while (idx <= toIndex && iter.hasNext()) {
                    iter.next();
                    idx++;
                }

                final T[] a = (T[]) new Object[fromIndex - toIndex];

                while (iter.hasNext()) {
                    a[idx - 1 - toIndex] = iter.next();

                    if (idx++ >= fromIndex) {
                        break;
                    }
                }

                for (int i = a.length - 1; i >= 0; i--) {
                    result = accumulator.apply(result, i + toIndex + 1, a[i], c);

                    if (conditionToBreak.test(a[i], result)) {
                        break;
                    }
                }